package com.ai.bmg.bmgwebboot.test.zk;


import java.util.ArrayDeque;
import java.util.Queue;

/**
 * 功能描述
 *
 * @author cWX1142527
 * @since 2023年01月18日
 */
public class Java_735_行星碰撞 {
    public static void main(String args[]) {
        int[] nums = new int[]{-2,-1,-3,-4,-1,-2,-1,-5,-4};
        int[] result = asteroidCollision(nums);
        System.out.println(result);
    }

    public static int[] asteroidCollision(int[] asteroids) {
        // 使用列进行处理
        // 当队列尾的元素是负数时是向左的，不可能与接下来的数据进行碰撞，所以只有当队列尾
        // 的元素是正的时候才可能碰撞
        Queue<Integer> queue = new ArrayDeque();
        for (int i = 0; i < asteroids.length; i++) {
            int currentVal = asteroids[i];
            if (queue.isEmpty()) {
                queue.offer(currentVal);
                continue;
            }
            while (!queue.isEmpty()) {
                int topVal = queue.peek();
                if (topVal < 0) {
                    queue.offer(currentVal);
                    break;
                }
                if (currentVal > 0) {
                    queue.offer(currentVal);
                    break;
                }
                if (topVal + currentVal == 0) {
                    queue.poll();
                    break;
                }
                if (topVal + currentVal > 0) {
                    break;
                }
                if (topVal + currentVal < 0) {
                    queue.poll();
                }
            }
        }
        int[] retInt = new int[]{};
        int i = 0;
        while (!queue.isEmpty()) {
            retInt[i] = queue.poll();
            i++;
        }

        return retInt;
    }
}